package com.ueboot.weishop.service.weixin;

import java.util.Map;

/**
 * Created by yangkui on 15/11/4.
 * 所有与微信相关的公共服务
 */
public interface WeiXinService {

    /**
     * 根据微信配置的类型获取对应的微信访问接口，默认会缓存2小时。
     *
     * @param configType 配置类型：用户公众号、技师公众号，@see io.dabing.o2o.entity.config.WeixinConfig
     * @return 调用微信所有接口之前的必备参数accessToken
     */
    String getAccessToken(String configType);

    /**
     * 根据accessToken获取jsapi_ticket值，用于页面调用jssdk时签名使用。必须缓存
     *
     * @param accessToken
     * @return
     */
    String getJSApiTicket(String accessToken);

    /**
     * 调用微信统一下单接口，返回前端需要的字段
     *
     * @param req 支付请求参数
     */
    WXUnifiedOderResp unifiedOrder(WXUnifiedOderReq req);

    /**
     * 调用调用微信退款接口，返回前端需要的字段
     *
     * @param req 退款请求参数
     */
    WXRefundOrderResp refundOrder(WXRefundOrderReq req);

    /**
     * 调用调用微信发红包接口，返回前端需要的字段
     *
     * @param req 发红包请求参数
     */
    WXRedPackResp sendRedPack(WXRedPackReq req);

    /**
     * 通过code获取openId
     *
     * @param code       由微信静默方式授权提供的code值
     * @param configType 公众号类型
     * @return
     */
    String getOpenIdByCode(String code, String configType);

    /**
     * 调用微信对账单下载接口，返回账单信息
     *
     * @param req 对账单下载请求参数
     */
    WeiXinDownloadBillResp downloadBill(WeiXinDownloadBillReq req);

    Map<String, String> doSendMessage(String accessToken, WeiXinMessage message);
}
